<?php namespace Admin\Controller; 

//引用Model类
use Common\Model\Brand;
use Common\Model\TypeAttr;
use Common\Model\Cate;
use Common\Model\GoodsDetail;
use Common\Model\GoodsAttr;
use Common\Model\GoodsList;

//类型管理控制器
class GoodsController extends CommonController{
	//定义属性
	private $goodsModel;
	
	//自定义构造函数
	public function __auto(){
		//实例化对象（类型表）
		$this->goodsModel = new \Common\Model\Goods;
	}
	
	//查-商品列表 
	public function index(){
		//一.显示商品列表
			//1.获取wsshop_goods表中所有的数据
			$goodsData=$this->goodsModel->get();
			//2.判断有没有商品，如果没有先去添加
			if(!$goodsData) View::error('先去添加商品',U('add'));
			//3.如果表中有商品就分配商品信息变量
			View::with('goodsData',$goodsData);
		//三.载入商品列表界面
		View::make();
	}
	
	//删除商品
	public function del(){
		//思路:删除商品的同时，同时删除商品gid对应的商品详情/评论/订单列表/商品属性/货品列表
			//获取要删除的商品gid
			$gid=Q('get.gid',0,'intval');
			//1.删除商品详细
				//1.1实例化商品详情表
				$goodsDatailModel = new GoodsDetail;
				//1.2获取对应的商品图册
				$goodsDatail_gdpic=$goodsDatailModel->where("wsshop_goods_gid={$gid}")->pluck('gdpic');
				//1.3分割gdpic，分3张小中大图片
				$data=explode('|', $goodsDatail_gdpic);
				//1.4还原原图片
				$sourceImg=str_replace("_s.",".", $data[0]);
				//1.5把原图压到$data中
				$data[]=$sourceImg;
				//1.6循环删除原图和商品图册的小中大3张图
				foreach ($data as $k => $v) {
					//删除图片
					unlink($v);
				}
				//1.2删除对应的商品详情表
				$goodsDatailModel->where("wsshop_goods_gid={$gid}")->delete();
			
			
			
			//2.删除商品的评论
			
			
			//3.删除商品的订单
			
			//4.删除商品的属性
			$goodsAttrModel = new GoodsAttr;
			$goodsAttrModel->where("wsshop_goods_gid={$gid}")->delete();
			
			//5.删除商品的货品列表
			$goodsListModel = new GoodsList();
			$goodsListModel->where("wsshop_goods_gid={$gid}")->delete();
			
			
			//6.删除该商品
				//6.1获取商品的列表图
				$listView = $this->goodsModel->where("gid={$gid}")->pluck('listview');
				//6.2拼接原图的缩略图
				$listImg=str_replace('.', '_list.', $listView);
				//6.3删除原图和列表图
				unlink($listView);
				unlink($listImg);
				//6.4删除对应的商品表信息
				$this->goodsModel->where("gid={$gid}")->delete();
				View::success('删除成功');
	}
	
	
	//编辑商品
	public function edit(){
		
		//三.修改商品信息
			//1.判断是否有值用post过来
//			P($_POST);exit;
			if(IS_POST){
//				p(Q('post.'));exit;
				//如果有值post过来就调用edit方法，如果修改成功后提示成功
				if($this->goodsModel->edit()) View::success('修改成功','index');
				//如果修改失败提示错误信息
				View::error($this->goodsModel->getError());
			}
		//获取要编辑的商品对应的商品ID
		$gid = Q('get.gid',0,'intval');
		//二.显示要编辑对应的商品的旧数据
			//第一步:基本信息,列表图,商品图册，商品详情-商品表和商品详情表
				//1.关联商品表和分类表，获取数据
				$oldData=$this->goodsModel
				->join('goods_detail',C('database.prefix') . 'goods.gid','=',C('database.prefix') . 'goods_detail.wsshop_goods_gid')
				->join('brand',C('database.prefix') . 'goods.wsshop_brand_bid','=',C('database.prefix') . 'brand.bid')
				->where(C('database.prefix') . "goods.gid={$gid}")
				->find();

				//2.处理商品图册
				$gdpic=explode(',', $oldData['gdpic']);//把字符串按|分割成数组
				$oldData['gdpic']=$gdpic;//压到数组中
				//3.分配数据到编辑页面
				View::with('oldData',$oldData);
			
			//第二步:处理“所属分类”
				//1.在编辑页面显示所属分类的所有分类名称
				$cateModel = new Cate();//实例化分类表
				$cateData = $cateModel->get();//获取分类表中所有的数据
				$cateData = Data::tree($cateData,'cname');//变为树状结构
//				p($cateData);exit;
				View::with('cateData',$cateData);//分配分类表中的数据到编辑页面
				
				//2.处理商品属性和规格
				$goodsAttrModel = new GoodsAttr();//实例化商品属性表
				$data = $goodsAttrModel
						->join('type_attr',C('database.prefix') . 'goods_attr.wsshop_type_attr_taid','=',C('database.prefix') . 'type_attr.taid')
						->where("wsshop_goods_gid={$gid}")
						->get();
				$taid = [];//定义一个空数组用来存放类型属性的ID
				//循环$data把对应的taid取出来
				foreach ($data as $k => $v) {
					$data[$k]['tavalue']=explode(',', $v['tavalue']);//把类型属性的值变为数组压入
					$taid[]=$v['taid'];//压入对应的taid
				}
			
				//3.把要编辑的商品对应的属性也取出来
				$typeAttrModel = new TypeAttr();//实例化类型属性表
				$taidStr=implode(',', $taid);//用,组合taid
				
				$typeAttr=$typeAttrModel->where("taid NOT IN ({$taidStr}) AND wsshop_type_tid={$oldData['wsshop_type_tid']}")->get();
				
				//4.循环把需要的东西压入$data中
				foreach ($typeAttr as $v) {
					
					$data[]=array(
						'gavalue'=>'',
						'taname'=>$v['taname'],
						'tavalue'=>explode(',', $v['tavalue']),
						'class'=>$v['class']
					);
				}

				//5.分配数据过去
				View::with('data',$data);
		
			//第三步：处理“所属品牌”
			$brandModel = new Brand();//实例化品牌表
			$brandData=$brandModel->get();//获取品牌所有的信息
//			p($brandData);exit;
			View::with('brandData',$brandData);//把品牌表信息分配到编辑页面

		//一.载入编辑商品界面
		View::make();
	}
	
	//获得类型属性
	public function getAttr(){
		//1.得到类型ID
		$tid=Q('post.tid',0,'intval');
		//2.通过选中 的类型ID找到类型的属性
		$typeAttrModel = new TypeAttr;
		//3.查询选中的所属分类对应的类型属性-type_attr表
		$data=$typeAttrModel->where("wsshop_type_tid={$tid}")->get();
		//4.把 tavalue字符串变为数组，将来好循环
		foreach ($data as $k => $v) {
			$data[$k]['tavalue'] = explode(',', $v['tavalue']);
		}
		//5.把数据转为json格式返回
		echo json_encode($data);exit;
	}
	
	//添加商品
	public function add(){
		//三.添加动作
			//1.判断是否有值用post过来
			if(IS_POST){
				//如果有值传过来就调用Goods类中的store方法,如果成功就提示成功
				if($this->goodsModel->store()) View::success('添加成功',U('add'));
				//如果添加不成功就提示错误信息
				View::error($this->goodsModel->getError());
			}
			
		//一.处理“所属分类”
			//1.实例化分类对象
			$cateModel = new Cate;
			//2.查询分类数据
			$cateData=$cateModel->get();
			//3.变树状结构
			$cateData=Data::tree($cateData,'cname','cid','pid');
			//3.分配变量
			View::with('cateData',$cateData);
		
		//二.处理“所属品牌”
			//1.实例化品牌对象
			$brandModel= new Brand;
			//2.查询品牌数据
			$brandData=$brandModel->get();
			//3.分配变量
			View::with('brandData',$brandData);
		
		//载入添加商品界面
		View::make();
	}
	
	//上传商品列表图调用的方法
	public function uploadList(){
		$file = Upload::path('Upload/listImg/' . date('Y/m'))->make();
	    if (empty($file)) {
	        // 相当于：echo json_encode(Upload::getError());exit;
	        $this->ajax(Upload::getError());
	    } else {
	    		//处理上传的图片
	    		$thumb_pic=str_replace(".{$file[0]['ext']}", "_list.{$file[0]['ext']}", $file[0]['path']);
				$thumb_pic=Image::thumb($file[0]['path'],$thumb_pic,240,240,6);
	        /** $file内部就是以下这个数组
	            $file = array(
	                0 => array(
		                'path' => 'Upload/Content/15/8/123981239172.jpg'    ,
		                'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
		                'image' => 1
	            ),
	        );**/
	        //上传成功，把上传好的信息返给js 也就是uploadify
	        $data = $file[0];
	        // 相当于：echo json_encode($data);exit;
	        $this->ajax($data);
	    }
	}
	
	//商品列表图-点击删除时，删除上传的列表图
	public function delImg(){
		//1.获取原图路径
		$img=Q('post.delImg');
		//2.原图信息
		$path = pathinfo($img);
		//3.删除原图
		unlink($img);
		//4.删除缩略图
		$listView=str_replace(".{$path['extension']}", "_list.{$path['extension']}", $img);//拼接获取列表图的路径
		unlink($listView);
	}
	
	//上传商品图册调用的方法
	public function uploadShopImg(){
		$file = Upload::path('Upload/ShopImg/' . date('Y/m'))->make();
	    if (empty($file)) {
	        // 相当于：echo json_encode(Upload::getError());exit;
	        $this->ajax(Upload::getError());
	    } else {
	    	//处理上传的图片
	    	$thumb=str_replace(".{$file[0]['ext']}", "_thumb.{$file[0]['ext']}", $file[0]['path']);
			Image::thumb($file[0]['path'],$thumb,560,560,6);//商品缩略图
	        /** $file内部就是以下这个数组
	            $file = array(
	                0 => array(
		                'path' => 'Upload/Content/15/8/123981239172.jpg'    ,
		                'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
		                'image' => 1
	            ),
	        );**/
	        //上传成功，把上传好的信息返给js 也就是uploadify
	        $data = $file[0];
	        // 相当于：echo json_encode($data);exit;
	        $this->ajax($data);
	    }
	}

	//商品图册-点击删除商品图册时删除图片
	public function delShopImg(){
		//1.获取原图路径
		$img=Q('post.delShopImg');
		//2.原图信息
		$path = pathinfo($img);
		//3.拼接原图缩略后的小图，中图，大图
		$thumb=str_replace(".{$path['extension']}", "_thumb.{$path['extension']}", $img);//缩略图，小图
		//4.删除缩略图和原图
		unlink($thumb);//删除缩略图
		unlink($img);//删除原图
	}


}
